﻿//表示代理执行的单一的读或写操作。
//操作对象（Operation）用于实现存储对象（Store）和代理对象（Proxy）之间的通信。
//应用程序开发人员很少需要直接使用操作对象
//几个操作可以在批处理中批量处理。
Ext.data.Operation = Ext.extend(Object, {

    //如果该操作要实现同步执行，则设为true。（默认为true）
    //该属性将被一个Batch检查以判断一系列操作是否能并联执行
    synchronous: true,

    //操作执行的动作. 应为'create', 'read', 'update' 或 'destroy'的其中之一
    action: undefined,

    //可选的筛选对象数组。仅适用于“读”操作。
    filters: undefined,

    //可选的排序对象数组。仅适用于“读”操作。
    sorters: undefined,

    //可选的分组配置参数。仅适用于“读”操作。
    group: undefined,

    //起始索引（偏移），在页面运行的一个“读”操作时使用。
    start: undefined,

    //要加载的记录数。用于分页时的“读”操作。
    limit: undefined,

    //当前操作所在的批操作（可选）
    batch: undefined,

    //是否开始调用服务
    started: false,

    //是否正在等待服务返回
    running: false,

    //调用服务是否完成
    complete: false,

    //调用服务是否成功
    success: undefined,

    //调用服务是否返回异常
    exception: false,

    //调用服务异常信息
    error: undefined,

    constructor: function (config) {
        Ext.apply(this, config || {});
    },

    //开始调用服务设置的信息
    setStarted: function () {
        this.started = true;
        this.running = true;
    },

    //调用服务结束后设置的信息
    setCompleted: function () {
        this.complete = true;
        this.running = false;
    },

    //服务调用成功后设置的信息
    setSuccessful: function () {
        this.success = true;
    },

    //服务调用异常后设置的信息
    setException: function (error) {
        this.exception = true;
        this.success = false;
        this.running = false;
        this.error = error;
    },

    //开始调用服务设置的信息
    markStarted: function () {
        console.warn("Operation: markStarted has been deprecated. Please use setStarted");
        return this.setStarted();
    },

    //调用服务结束后设置的信息
    markCompleted: function () {
        console.warn("Operation: markCompleted has been deprecated. Please use setCompleted");
        return this.setCompleted();
    },

    //服务调用成功后设置的信息
    markSuccessful: function () {
        console.warn("Operation: markSuccessful has been deprecated. Please use setSuccessful");
        return this.setSuccessful();
    },

    //服务调用异常后设置的信息
    markException: function () {
        console.warn("Operation: markException has been deprecated. Please use setException");
        return this.setException();
    },

    //是否存在异常
    hasException: function () {
        return this.exception === true;
    },

    //获取异常信息
    getError: function () {
        return this.error;
    },

    //Returns an array of Ext.data.Model instances as set by the Proxy.
    getRecords: function () {
        var resultSet = this.getResultSet();

        return (resultSet == undefined ? this.records : resultSet.records);
    },

    //Returns the ResultSet object (if set by the Proxy). 
    //This object will contain the model instances as well as meta data such as number of instances fetched, 
    //number available etc
    getResultSet: function () {
        return this.resultSet;
    },

    //是否开始调用服务
    isStarted: function () {
        return this.started === true;
    },

    //是否正在等待服务返回
    isRunning: function () {
        return this.running === true;
    },

    //操作是否完成
    isComplete: function () {
        return this.complete === true;
    },

    //Returns true if the Operation has completed and was successful
    wasSuccessful: function () {
        return this.isComplete() && this.success === true;
    },


    setBatch: function (batch) {
        this.batch = batch;
    },

    //检查当前操作是否应该引发回写操作。
    allowWrite: function () {
        return this.action != 'read';
    }
});